package com.hixtrip.sample.domain.order;

import com.hixtrip.sample.constant.PayStatus;
import com.hixtrip.sample.domain.order.model.Order;
import com.hixtrip.sample.domain.order.repository.OrderRepository;
import com.hixtrip.sample.domain.pay.model.CommandPay;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Objects;

/**
 * 订单领域服务
 * todo 只需要实现创建订单即可
 */
@Component
public class OrderDomainService {

    @Autowired
    private OrderRepository orderRepository;

    /**
     * todo 需要实现
     * 创建待付款订单
     */
    public void createOrder(Order order) {
        //需要你在infra实现, 自行定义出入参

        // 创建订单
        orderRepository.insert(order);
    }

    /**
     * todo 需要实现
     * 待付款订单支付成功
     */
    public void orderPaySuccess(CommandPay commandPay) {
        //需要你在infra实现, 自行定义出入参

        // 判断是否已支付(重复支付判断)
        Boolean isPay = orderRepository.findIsPay(commandPay.getOrderId());

        if (!isPay) {
            Order order = orderRepository.getOrderById(commandPay.getOrderId());

            // 二次校验
            if (order != null && !Objects.equals(order.getPayStatus(), PayStatus.PAY_FAIL_STATUS)){

                // 更新订单状态
                order.setPayStatus(PayStatus.PAY_SUCCEED_STATUS);
                orderRepository.updateOrder(order);
            }
        }
    }

    /**
     * todo 需要实现
     * 待付款订单支付失败
     */
    public void orderPayFail(CommandPay commandPay) {
        //需要你在infra实现, 自行定义出入参
        Order order = orderRepository.getOrderById(commandPay.getOrderId());

        if (order != null && Objects.equals(order.getPayStatus(), PayStatus.PAY_WAIT_STATUS)){

            // 更新订单状态
            order.setPayStatus(PayStatus.PAY_FAIL_STATUS);
            orderRepository.updateOrder(order);
        }
    }
}
